.\" ident	@(#)aoutdem:man/demangle.1	3.2
.\"
.\" C++ Standard Components, Release 3.0.
.\"
.\" Copyright (c) 1991, 1992 AT&T and UNIX System Laboratories, Inc.
.\" Copyright (c) 1988, 1989, 1990 AT&T.  All Rights Reserved.
.\"
.\" THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T and UNIX System
.\" Laboratories, Inc.  The copyright notice above does not evidence
.\" any actual or intended publication of such source code.
.\" 
.TH \f3demangle\f1 \f31C++\f1 " "
.SH NAME
c++filt, dem, demangle \- demangle C++ encoded symbol names
.SH SYNOPSIS
.B
c++filt [ \f2files\f3 ]

.B
dem \f2encodedname\f3 ...

.B
demangle [ -dfnostvx ] [ -q\f2qualstring\f4 ] \f2a.out\f3 ...
.SH DESCRIPTION
.LP
These commands all have to do with demangling the encoded symbol names
produced by AT&T versions of
\f3CC(1C++)\f1.
.PP
\f3c++filt\f1
copies the contents of \f3files\f1( standard input if no file name is given ) to standard output after demangling
tokens which look like C++ encoded symbols names. The previous options in previous release,
.B \-m
,
.B \-s
,
and 
.B \-v
,are no longer supported.
.PP
.sp
\f3dem\f1
demangles the tokens in its argument list, all of which are assumed
to be encoded C++ symbol names.
Output is in the form 
.RS
.Bf
encodedname1 == demangledname1
encodedname2 == demangledname2
\f2etc.\f4
.Be
.RE
.PP
.sp
\f3demangle\f1
demangles all the C++ symbol names 
strewn throughout each of the object files in the argument list.
\f3demangle\f1
overwrites each file with a new file in which the names are demangled.
Use of
\f3demangle\f1
makes it easier to use debuggers such as 
\f3dbx(1)\f1
and
\f3sdb(1)\f1,
and it allows tools such as 
\f3nm(1)\f1
and
\f3gprof(1)\f1
to produce output with pleasant symbol names.  
.PP
The various options modify the behavior of 
\f3demangle\f1
as follows:
.TP 14
.B \-f
Do not demangle function names (including operator names).
.TP
.B \-o
Do not demangle operator names.
.TP
.B \-s
Omit signatures on all function names.
.TP
.B \-t
Omit signatures on all function names, except for the second and all 
successively encountered instances 
of overloaded functions.
.TP
.BI \-q qualstring
Use
.I qualstring
as the class qualifier instead of "::".
.TP
.B \-d
Equivalent to 
.B \-t
and the C++ only characters in the second and the successive instances of overloaded function names will be replaced as follows :
(Necessary when preparing an object file for debugging.
See the warnings section below.)
.sp
.RS
.Bf
"(" --> _lp_
")" --> _rp_
"[" --> _ls_
"]" --> _rs_
"*" --> _st_
"&" --> _am_
"," --> _cm_
" " --> _sp_
"<" --> _la_
">" --> _ra_
"::" --> _cc_
"~" -->	_dt_
"+" --> _pl_
"=" --> _eq_
"-" --> _mi_
"%" --> _pc_
"!" --> _bn_
"|" --> _or_ 
"/" --> _di_ 
"^" --> _er_
.Be
.RE
.sp
.TP
.B \-v
Lets you see the name demanglings taking place.
.TP
.B \-x
Lets you see the 
\f3dbx(5)\f1
symbol table translations taking place.
.TP
.B \-n
No execution mode.  Go through the motions without actually overwriting
the input object file.  Useful with 
.B \-v
and
.BR \-x .
.SH EXAMPLES
.RS
.Bf
nm p | c++filt | more
dem __rs__FR7istreamR6String 
demangle -d p
.Be
.RE
.sp
The first command prints out a pleasant version of 
.IR p 's 
symbol table;
the second command prints out the demangled version of one of the
symbols found in 
.IR p ;
the last command actually changes
.IR p 's
symbol table, to make it easier to debug
.I p
with 
\f3dbx(1)\f1.
.SH WARNINGS
These routines
work only with 2.0 or later versions of AT&T's
\f3CC(1C++)\f1.
.PP
\f3demangle\f1's
.B \-d
option is defined the way it is
in order to prevent most debuggers
from dumping core, and to
enable the setting of breakpoints on instances of overloaded functions.
.PP
If 
\f3demangle\f1
doesn't understand the meaning of something in an object file, 
it may fail to demangle a name which needs demangling.
\f3demangle\f1
may (with 
.I extremely 
low probability) demangle a name which shouldn't have been demangled.
.PP
\f3demangle\f1
trys to demangle names with template type in it as much as possible so that
the original information of names can be recovered.
.SH "SEE ALSO"
\f3demangle(3C++)\f1, \f3CC(1C++)\f1, \f3a.out(5)\f1, \f3ld(1)\f1, \f3nm(1)\f1
